package api

import (
	"gitee.com/dingiyan/goMyAdmin/db"
	"gitee.com/dingiyan/goMyAdmin/service/table"
	"github.com/gin-gonic/gin"
)

// QueryRelationshipsHandler 查询关联关系接口
func QueryRelationshipsHandler(c *gin.Context) {
	var input table.QueryRelationshipInput

	// 解析请求参数
	if err := c.ShouldBindJSON(&input); err != nil {
		c.JSON(200, resError(1, "Invalid input parameters"+err.Error()))
		return
	}

	// 调用服务层方法查询
	results, err := table.QueryTableRelationships(input)
	if err != nil {
		c.JSON(200, resError(2, "查询关联关系出错！"+err.Error()))
		return
	}

	// 返回查询结果
	c.JSON(200, success(results))
}

// AddRelationshipHandler 新增关联关系接口
func AddRelationshipHandler(c *gin.Context) {
	var input table.AddRelationshipInput

	// 解析请求参数
	if err := c.ShouldBindJSON(&input); err != nil {
		c.JSON(200, resError(1, "Invalid input parameters: "+err.Error()))
		return
	}

	// 校验关联关系列表是否为空
	if len(input.Relationships) == 0 {
		c.JSON(200, resError(2, "关联关系列表不能为空"))
		return
	}

	// 校验datasources是否存在
	dsRecord, err := db.GetUsersServerById(getUserId(c), input.DatasourceID)
	if err != nil || dsRecord == nil {
		c.JSON(200, resError(4, "数据源不存在！"))
		return
	}

	// 调用服务层方法新增
	err = table.AddRelationship(input)
	if err != nil {
		c.JSON(200, resError(3, "新增关联关系出错！"+err.Error()))
		return
	}

	// 返回成功信息
	c.JSON(200, success("关联关系新增成功"))
}

// UpdateRelationshipHandler 更新关联关系接口
func UpdateRelationshipHandler(c *gin.Context) {
	var input table.UpdateRelationshipInput

	// 解析请求参数
	if err := c.ShouldBindJSON(&input); err != nil {
		c.JSON(200, resError(1, "Invalid input parameters: "+err.Error()))
		return
	}

	// 校验输入数据
	if len(input.Relationships) < 1 {
		c.JSON(200, resError(2, "关联关系列表不能为空，且至少包含一条记录"))
		return
	}

	// 调用服务层方法更新
	err := table.UpdateRelationship(input)
	if err != nil {
		c.JSON(200, resError(3, "更新关联关系出错！"+err.Error()))
		return
	}

	// 返回成功信息
	c.JSON(200, success("关联关系更新成功"))
}

// DeleteRelationshipHandler 删除关联关系接口
func DeleteRelationshipHandler(c *gin.Context) {
	var input table.DeleteRelationshipInput

	// 解析请求参数
	if err := c.ShouldBindJSON(&input); err != nil {
		c.JSON(200, resError(1, "Invalid input parameters: "+err.Error()))
		return
	}

	// 调用服务层方法删除
	err := table.DeleteRelationship(input)
	if err != nil {
		c.JSON(200, resError(2, "删除关联关系出错！"+err.Error()))
		return
	}

	// 返回成功信息
	c.JSON(200, success("关联关系删除成功"))
}
